GtkStyleCascade *cascade;
GtkStyleContext *parent;
+ GtkWidget *widget;
GtkWidgetPath *widget_path;
GHashTable *style_data;
GSList *info_stack;
return g_object_new (GTK_TYPE_STYLE_CONTEXT, NULL);
}
+void
+_gtk_style_context_set_widget (GtkStyleContext *context,
+ GtkWidget *widget)
+{
+ g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+ g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget));
+
+ context->priv->widget = widget;
+}
+
/**
* gtk_style_context_add_provider:
* @context: a #GtkStyleContext
g_return_if_fail (path != NULL);
priv = context->priv;
+ g_return_if_fail (priv->widget == NULL);
if (priv->widget_path)
{
g_param_spec_ref (pcache->pspec);
g_value_init (&pcache->value, G_PARAM_SPEC_VALUE_TYPE (pspec));
- if (priv->widget_path)
+ if (priv->widget || priv->widget_path)
{
if (gtk_style_provider_get_style_property (GTK_STYLE_PROVIDER (priv->cascade),
priv->widget_path, state,
G_BEGIN_DECLS
-GtkCssValue * _gtk_style_context_peek_property (GtkStyleContext *context,
+void _gtk_style_context_set_widget (GtkStyleContext *context,
+ GtkWidget *widget);
+GtkCssValue * _gtk_style_context_peek_property (GtkStyleContext *context,
const char *property_name);
double _gtk_style_context_get_number (GtkStyleContext *context,
const char *property_name,
gtk_widget_path_free (priv->path);
if (priv->context)
- g_object_unref (priv->context);
+ {
+ _gtk_style_context_set_widget (priv->context, NULL);
+ g_object_unref (priv->context);
+ }
_gtk_widget_free_cached_sizes (widget);
gtk_style_context_set_parent (priv->context,
gtk_widget_get_style_context (priv->parent));
+ _gtk_style_context_set_widget (priv->context, widget);
g_signal_connect (widget->priv->context, "changed",
G_CALLBACK (style_context_changed), widget);
}